import { ICellRendererParams } from 'ag-grid-community'
import { FilterColumn } from 'monk-design/utils'
import { AdCellTemplateComponent } from '../components/cell-template/cell-template.component'

export type ClassType = 'primary' | 'danger' | 'default-cursor'

export interface SelectAllParams {
  columns?: FilterColumn[]
  isSelectAll?: boolean
  removeArchiveIds?: string[]
}

/**
 * 模板渲染类型接口联合
 */
export type RenderTemplateType<T, D> = {
  /**
   * 渲染标签类型
   */
  tag?: 'span' | 'img' | 'nzSwitch' | 'nzIcon'
  /* value值渲染 支持 字符串 数字 以及 函数渲染 默认取值cell.value */
  value?: string | number | ((cell?: AdCellTemplateComponent<T, D>) => string | number)
  /* 标签类名渲染 支持字符串 数组字符串 以及函数渲染 */
  class?:
    | ClassType
    | ClassType[]
    | ((cell?: AdCellTemplateComponent<T, D>) => ClassType | ClassType[])
  /* title渲染 支持字符串 函数渲染 默认值cell.value */
  title?: string | ((cell?: AdCellTemplateComponent<T, D>) => string)
  nzType?: string | ((cell?: AdCellTemplateComponent<T, D>) => string)
  nzTheme?: string | ((cell?: AdCellTemplateComponent<T, D>) => string)
  nzTwotoneColor?: string | ((cell?: AdCellTemplateComponent<T, D>) => string)
  /* 样式表渲染 函数渲染 类型参考angular内部ngStyle类 */
  style?:
    | Partial<CSSStyleDeclaration>
    | ((cell?: AdCellTemplateComponent<T, D>) => Partial<CSSStyleDeclaration>)
  /* 控制组件是否显示 */
  ngIf?: (cell?: AdCellTemplateComponent<T, D>) => boolean
  /* 组件点击事件监听 */
  click?: (cell?: AdCellTemplateComponent<T, D>, ev?: any) => any
  /* 权限编码 */
  auth?: string | ((cell?: AdCellTemplateComponent<T, D>) => string)
  /* nzPopoverContent渲染 支持字符串 模板 渲染*/
  nzPopoverContent?: string | ((cell?: AdCellTemplateComponent<T, D>) => string)
  /* nzTooltipTitle渲染 支持字符串 函数渲染*/
  nzTooltipTitle?: string | ((cell?: AdCellTemplateComponent<T, D>) => string)
  ngModel?: any | ((cell?: AdCellTemplateComponent<T, D>) => any)
  disabled?: boolean | ((cell?: AdCellTemplateComponent<T, D>) => boolean)
  ngModelChange?: (cell?: AdCellTemplateComponent<T, D>, ev?: any) => any
  /* 图片路径 支持字符串 函数 */
  src?: string | ((cell?: AdCellTemplateComponent<T, D>) => string)
  /* 图片alt属性 支持字符串 函数 */
  alt?: string | ((cell?: AdCellTemplateComponent<T, D>) => string)
}

/**
 * 配置列渲染参数接口
 */
export interface CellRendererParams<T = any, D = any> {
  cellRenderList: Array<RenderTemplateType<T, D>>
}

/**
 * 表格params接口
 */
export interface MyICellRendererParams<T = any, D = any> extends ICellRendererParams {
  cellRenderList?: RenderTemplateType<T, D>[]
  data: D
}

/**
 * 查看详情接口
 */
export interface CheckInfo<T = any, D = any> {
  checkInfo: (cell: AdCellTemplateComponent<T, D>) => any
}

/**
 * 查看详情接口
 */
export interface Delete<T = any, D = any> {
  delete: (cell: AdCellTemplateComponent<T, D>) => any
}

/**
 * 下载
 */
export interface Download<T = any, D = any> {
  download: (cell: AdCellTemplateComponent<T, D>) => any
}

/**
 * 编辑
 */
export interface Edit<T = any, D = any> {
  edit: (cell: AdCellTemplateComponent<T, D>) => any
}
